﻿/*
 * Created by SharpDevelop.
 * User: CeCi
 * Date: 28/03/2014
 * Time: 07:36 p.m.
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Data.OleDb;
using System.Data;
using System.Windows.Forms;
using Gestión_UTN.Entities;

namespace Gestión_UTN.daimpl
{
	/// <summary>
	/// Description of ciudaddaimpl.
	/// </summary>
	public class ciudaddaimpl:Gestión_UTN.da.ciudadda
	{
		public ciudaddaimpl()
		{
		}
		
		public bool SaveCiudad(int codPostal, string nombre, int prov_id)
		{
			bool ingresada = false;
			
			OleDbConnection conex = null;
			OleDbTransaction trans = null;
			
			try
			{
				conex = util.Conexion.conectarAccess();
				trans = null;
				
				if (null != conex) {
					
					string sql = "INSERT INTO ciu_ciudades(ciu_codPostal, ciu_nombre, prov_id)" +
                    			"VALUES(@ciu_codPostal, @ciu_nombre, @prov_id)";
					
					OleDbCommand insertar = new OleDbCommand(sql,conex);
					
					conex.Open();
					trans = conex.BeginTransaction();
					
					object[] values = {codPostal,nombre,prov_id};
					
					insertar.Parameters.AddRange(values);
					
					insertar.ExecuteNonQuery();
					
					trans.Commit();
					
					ingresada = true;
					
					conex.Close();
				}
				
			} catch (Exception) {
				ingresada = false;
				trans.Rollback();
				conex.Close();
			}
			
			return ingresada;
		}
		
		public bool DeleteCiudad(int codPostal)
		{
			bool eliminada = false;
			
			OleDbConnection conex = null;
			OleDbTransaction trans = null;
			
			try
			{
				conex = util.Conexion.conectarAccess();
				trans = null;
				
				if (null != conex) {
					
					string sql = "DELETE FROM ciu_ciudades WHERE ciu_codPostal = @ciu_codPostal";
					
					OleDbCommand eliminar = new OleDbCommand(sql,conex);
					
					conex.Open();
					
					trans = conex.BeginTransaction();
					
					eliminar.Parameters.AddWithValue("@ciu_codPostal",codPostal);
					
					eliminar.ExecuteNonQuery();
					
					trans.Commit();
					
					eliminada = true;
					
					conex.Close();
				}
				
			} catch (Exception) {
				eliminada = false;
				trans.Rollback();
				conex.Close();
			}
			
			return eliminada;
		}
		
		public bool ModifyCiudad(int codPostal_anterior, int codPostal, string nombre, int prov_id)
		{
			bool modificada = false;
			
			OleDbConnection conex = null;
			OleDbTransaction trans = null;
			
			try
			{
				conex = util.Conexion.conectarAccess();
				trans = null;
				
				if (null != conex) {
					
					string sql = "UPDATE ciu_ciudades SET ciu_codPostal = @ciu_codPostal," +
									" ciu_nombre = @ciu_nombre, prov_id = @prov_id " +
									"WHERE ciu_codPostal = @ciu_codPostal_anterior";
					
					OleDbCommand modificar = new OleDbCommand(sql,conex);
					
					conex.Open();
					trans = conex.BeginTransaction();
					
					object[] values = {codPostal,nombre,prov_id,codPostal_anterior};
					
					modificar.Parameters.AddRange(values);
					
					modificar.ExecuteNonQuery();
					
					trans.Commit();
					
					modificada = true;
					
					conex.Close();
				}
				
			} catch (Exception) {
				modificada = false;
				trans.Rollback();
				conex.Close();
			}
			
			return modificada;
		}
		
		public System.Data.DataTable FindAllCiudades()
		{
			DataTable tablaCiudades = null;
			
			OleDbConnection conex = null;
			
			try
			{
				conex = util.Conexion.conectarAccess();
				tablaCiudades = new DataTable();
				
				if (null != conex) {
					
					string sql = "SELECT ciu_codPostal, ciu_nombre, prov_nombre" +
									" FROM ciu_ciudades ciu, prov_provincias prov" +
									"WHERE ciu.prov_id = prov.prov_id";
					
					 OleDbDataAdapter adaptador = new OleDbDataAdapter(sql, conex);
					 
					 conex.Open();
					 
					 adaptador.Fill(tablaCiudades,"ciudades");
					
					 conex.Close();
				}
				
			} catch (Exception) {
				
				tablaCiudades = null;
				conex.Close();
			}
			
			return tablaCiudades;
		}
		
		public Entities.Ciudad FindCiudadByCodPostal(int codPostal)
		{
			Ciudad ciudad = null;
			
			OleDbConnection conex = null;
			OleDbTransaction trans = null;
			
			try
			{
				conex = util.Conexion.conectarAccess();
				trans = null;
				
				if (null != conex) {
					
					string sql = "SELECT ciu_codPostal, ciu_nombre, prov_id" +
									" FROM ciu_ciudades ciu" +
									" WHERE ciu_codPostal = @ciu_codPostal";
					
					OleDbCommand consulta = new OleDbCommand(sql,conex);
					
					conex.Open();
					trans = conex.BeginTransaction();
					 
					consulta.Parameters.AddWithValue("@ciu_codPostal",codPostal);
					
					OleDbDataReader lector = consulta.ExecuteReader();
					
					ciudad = new Ciudad(Convert.ToInt16(lector[0].ToString()),lector[1].ToString(),
					                    Convert.ToInt16(lector[2].ToString()));
					 conex.Close();
				}
				
			} catch (Exception) {
				
				trans.Rollback();
				ciudad = null;
				conex.Close();
			}
			
			return ciudad;
		}
		
		public Ciudad FindCiudadByNombre(string nombre)
		{
			Ciudad ciudad = null;
			
			OleDbConnection conex = null;
			OleDbTransaction trans = null;
			
			try
			{
				conex = util.Conexion.conectarAccess();
				trans = null;
				
				if (null != conex) {
					
					string sql = "SELECT ciu_codPostal, ciu_nombre, prov_id" +
									" FROM ciu_ciudades ciu" +			
									" WHERE ciu_nombre = @ciu_nombre";
					
					OleDbCommand consulta = new OleDbCommand(sql,conex);
					
					conex.Open();
					trans = conex.BeginTransaction();
					 
					consulta.Parameters.AddWithValue("@ciu_nombre",nombre);
					
					OleDbDataReader lector = consulta.ExecuteReader();
					
					ciudad = new Ciudad(Convert.ToInt16(lector[0].ToString()),lector[1].ToString(),
					                    Convert.ToInt16(lector[2].ToString()));
					 conex.Close();
				}
				
			} catch (Exception) {
				
				trans.Rollback();
				ciudad = null;
				conex.Close();
			}
			
			return ciudad;
		}
	}
}
